#include <Arduino.h>

#include "bluetooth_connect.hpp"
#include "communicate.hpp"
#include "mobile_rc_server.hpp"
#include "motion_control.hpp"

using namespace mobile_remote_control_server;
using namespace bluetooth_connect;

// 定义任务句柄
TaskHandle_t ServerTaskHandle = NULL;
TaskHandle_t UartTaskHandle = NULL;
TaskHandle_t BluetoothTaskHandle = NULL;

Data_Test_s test_data = {0xA5, sizeof(test_data.data), 0x01, 0x02};

uint32_t count = 0;

// 任务 1：网页服务
void ServerTask(void * pvParameters)
{
    while (true) {
        loopServer();  // 处理网页请求

        vTaskDelay(5 / portTICK_PERIOD_MS);
    }
}

// 任务 2：串口数据处理
void UartTask(void * pvParameters)
{
    while (true) {
        sendData();  // 发送数据到 UART1

        vTaskDelay(5 / portTICK_PERIOD_MS);
    }
}

// 任务 3：蓝牙数据处理
void BluetoothTask(void * pvParameters)
{
    while (true) {
        loopBluetooth();  // 处理蓝牙数据

        vTaskDelay(5 / portTICK_PERIOD_MS);
    }
}

void setup()
{
    Serial.begin(9600);
    delay(100);
    setupServer();
    setupUART(RC_ET08A);  // 初始化 UART 接口
    setupBluetooth();     // 初始化蓝牙

    // 创建任务 1
    xTaskCreate(
        ServerTask,        // 任务函数
        "Task1",           // 任务名称
        4096,              // 任务栈大小（字节）
        NULL,              // 任务参数
        1,                 // 任务优先级
        &ServerTaskHandle  // 任务句柄
    );

    // 创建任务 2
    xTaskCreate(
        UartTask,        // 任务函数
        "Task2",         // 任务名称
        1024,            // 任务栈大小（字节）
        NULL,            // 任务参数
        1,               // 任务优先级
        &UartTaskHandle  // 任务句柄
    );

    // 创建任务 3
    xTaskCreate(
        BluetoothTask,        // 任务函数
        "Task3",              // 任务名称
        1024,                 // 任务栈大小（字节）
        NULL,                 // 任务参数
        1,                    // 任务优先级
        &BluetoothTaskHandle  // 任务句柄
    );

    Serial.println("初始化完成");
}

void loop() {}

// END =====================================================
